package jnpf.service;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import jnpf.entity.FileDetail;
import jnpf.mapper.FileDetailMapper;
import lombok.SneakyThrows;
import org.springframework.stereotype.Service;

import cn.xuyanwu.spring.file.storage.FileInfo;
import cn.xuyanwu.spring.file.storage.recorder.FileRecorder;

import java.util.List;

/**
 * 用来将文件上传记录保存到数据库，这里使用了 MyBatis-Plus 和 Hutool 工具类
 */
@Service
public class FileDetailService extends ServiceImpl<FileDetailMapper, FileDetail> implements FileRecorder {


    /**
     * 保存文件信息到数据库
     */
    @SneakyThrows
    @Override
    public boolean record(FileInfo info) {
//        FileDetail detail = BeanUtil.copyProperties(info,FileDetail.class,"attr");
//
//        //这是手动获 取附加属性字典 并转成 json 字符串，方便存储在数据库中
//        if (info.getAttr() != null) {
//            detail.setAttr(new ObjectMapper().writeValueAsString(info.getAttr()));
//        }
//        // 验证url是否存在--同一个url无法对应两个文件
//        List<FileDetail> list = this.list(new QueryWrapper<FileDetail>().eq(FileDetail.COL_URL, detail.getUrl()));
//        boolean b;
//        if (list.size() > 0) {
//            detail.setId(list.get(0).getId());
//            b = updateById(detail);
//        } else {
//            b = save(detail);
//        }
//        if (b) {
//            info.setId(detail.getId());
//        }
//        return b;
        return true;
    }

    /**
     * 根据 url 查询文件信息
     */
    @SneakyThrows
    @Override
    public FileInfo getByUrl(String url) {
//        FileDetail detail = getOne(new QueryWrapper<FileDetail>().eq(FileDetail.COL_URL,url));
//        FileInfo info = BeanUtil.copyProperties(detail,FileInfo.class,"attr");
//
//        //这是手动获取数据库中的 json 字符串 并转成 附加属性字典，方便使用
//        if (StrUtil.isNotBlank(detail.getAttr())) {
//            info.setAttr(new ObjectMapper().readValue(detail.getAttr(),Dict.class));
//        }
//        return info;
        return null;
    }

    /**
     * 根据 url 删除文件信息
     */
    @Override
    public boolean delete(String url) {
//        remove(new QueryWrapper<FileDetail>().eq(FileDetail.COL_URL,url));
        return true;
    }

    /**
     * 通过路径获取文件列表
     *
     * @param path
     * @return
     */
    public List<FileDetail> getFileList(String path) {
        return null;
//        return this.list(new QueryWrapper<FileDetail>().eq(FileDetail.COL_PATH, path));
    }

    /**
     * 获取文件信息
     *
     * @param path
     * @param fileName
     * @return
     */
    public FileDetail getFileDetail(String path, String fileName, String platform) {
        return null;
//        return this.getOne(new QueryWrapper<FileDetail>().eq(FileDetail.COL_PATH, path).eq(FileDetail.COL_FILENAME, fileName).eq(FileDetail.COL_PLATFORM, platform));
    }
}


